/**
 * 纯静态文件管理器
 * 用于替代 Django 后端的文件操作功能
 * 
 * 功能：
 * 1. 下载 Markdown 文件
 * 2. 下载 JSON 配置文件
 * 3. 本地预览
 * 4. 数据验证
 */

class FileManager {
    constructor() {
        this.init();
    }

    init() {
        console.log('FileManager initialized - Pure Static Mode');
    }

    /**
     * 下载 Markdown 文件
     * @param {string} fileName - 文件名（含扩展名）
     * @param {string} content - 文件内容
     */
    downloadMarkdown(fileName, content) {
        // 确保文件名以 .md 结尾
        if (!fileName.endsWith('.md')) {
            fileName += '.md';
        }

        const blob = new Blob([content], { type: 'text/markdown;charset=utf-8' });
        this.triggerDownload(blob, fileName);
        
        console.log(`✅ Markdown file ready for download: ${fileName}`);
        return true;
    }

    /**
     * 下载 JSON 文件
     * @param {Object} data - JSON 数据对象
     * @param {string} fileName - 文件名（默认 Blogs.json）
     */
    downloadJSON(data, fileName = 'Blogs.json') {
        try {
            // 格式化 JSON，使其易读
            const jsonStr = JSON.stringify(data, null, 2);
            const blob = new Blob([jsonStr], { type: 'application/json;charset=utf-8' });
            this.triggerDownload(blob, fileName);
            
            console.log(`✅ JSON file ready for download: ${fileName}`);
            return true;
        } catch (error) {
            console.error('❌ Error creating JSON file:', error);
            return false;
        }
    }

    /**
     * 触发浏览器下载
     * @param {Blob} blob - 文件内容
     * @param {string} fileName - 文件名
     */
    triggerDownload(blob, fileName) {
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = fileName;
        a.style.display = 'none';
        
        document.body.appendChild(a);
        a.click();
        
        // 清理
        setTimeout(() => {
            document.body.removeChild(a);
            URL.revokeObjectURL(url);
        }, 100);
    }

    /**
     * 同时下载多个文件
     * @param {Array} files - 文件数组 [{fileName, content, type}]
     */
    downloadMultiple(files) {
        files.forEach((file, index) => {
            setTimeout(() => {
                if (file.type === 'markdown') {
                    this.downloadMarkdown(file.fileName, file.content);
                } else if (file.type === 'json') {
                    this.downloadJSON(file.content, file.fileName);
                }
            }, index * 200); // 延迟下载，避免浏览器阻止
        });
    }

    /**
     * 读取本地 JSON 文件
     * @param {string} filePath - 文件路径
     * @returns {Promise<Object>}
     */
    async readJSON(filePath) {
        try {
            const response = await fetch(filePath);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            const data = await response.json();
            return data;
        } catch (error) {
            console.error(`❌ Error reading JSON file ${filePath}:`, error);
            throw error;
        }
    }

    /**
     * 验证博客数据格式
     * @param {Object} blog - 博客对象
     * @returns {Object} {valid: boolean, errors: array}
     */
    validateBlogData(blog) {
        const errors = [];
        const requiredFields = ['id', 'title', 'contentFile'];

        // 检查必填字段
        requiredFields.forEach(field => {
            if (!blog[field]) {
                errors.push(`缺少必填字段: ${field}`);
            }
        });

        // 检查 ID 格式
        if (blog.id && typeof blog.id !== 'number') {
            errors.push('ID 必须是数字');
        }

        // 检查标题长度
        if (blog.title && blog.title.length > 200) {
            errors.push('标题过长（最多200字符）');
        }

        // 检查文件名格式
        if (blog.contentFile && !blog.contentFile.endsWith('.md')) {
            errors.push('内容文件必须是 .md 格式');
        }

        return {
            valid: errors.length === 0,
            errors: errors
        };
    }

    /**
     * 生成使用说明
     */
    showInstructions() {
        const instructions = `
📝 文件保存说明

1. 点击"保存"后，会自动下载以下文件：
   - [文章标题].md - 博客内容文件
   - Blogs.json - 博客配置文件

2. 将下载的文件放到对应位置：
   - [文章标题].md → frontend/AiBlog/Blogs/
   - Blogs.json → frontend/AiBlog/

3. 更新网站：
   方法A：手动上传到服务器
   方法B：提交到 Git
   
   git add frontend/AiBlog/
   git commit -m "Add/Update blog post"
   git push

4. 稍等片刻，静态站点会自动更新

💡 提示：
- 建议先备份现有的 Blogs.json
- 可以使用 Git 查看更改
- 文件名避免使用特殊字符
        `;
        
        return instructions;
    }

    /**
     * 创建部署提示
     * @param {string} fileName - 文件名
     */
    createDeploymentHint(fileName) {
        const hint = `
✅ 文件 "${fileName}" 已准备好下载

📋 下一步操作：
1. 将文件放到项目对应目录
2. 提交到 Git 或上传到服务器
3. 等待静态站点更新

需要帮助？查看 admin/使用指南.md
        `;
        
        console.log(hint);
        return hint;
    }

    /**
     * 导出所有博客数据（备份功能）
     * @param {Array} blogs - 博客数组
     */
    exportAllBlogs(blogs) {
        const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
        const fileName = `blogs-backup-${timestamp}.json`;
        
        const backupData = {
            exportDate: new Date().toISOString(),
            version: '1.0',
            totalBlogs: blogs.length,
            blogs: blogs
        };
        
        this.downloadJSON(backupData, fileName);
        console.log(`✅ Backup created: ${fileName}`);
    }

    /**
     * 生成部署脚本内容
     * @param {Array} files - 要部署的文件列表
     */
    generateDeployScript(files) {
        const script = `#!/bin/bash
# 自动生成的部署脚本
# 生成时间: ${new Date().toISOString()}

echo "🚀 开始部署更新..."

# 添加文件到 Git
${files.map(f => `git add ${f}`).join('\n')}

# 检查状态
git status

# 提交更改
echo "📝 请输入提交信息:"
read commit_message
git commit -m "$commit_message"

# 推送到远程
git push origin main

echo "✅ 部署完成！"
echo "⏳ 请等待静态站点自动更新..."
`;

        const blob = new Blob([script], { type: 'text/plain' });
        this.triggerDownload(blob, 'deploy.sh');
        
        console.log('✅ 部署脚本已生成');
    }

    /**
     * 检查浏览器功能支持
     */
    checkBrowserSupport() {
        const support = {
            download: true, // 所有现代浏览器都支持
            fileSystemAccess: 'showSaveFilePicker' in window,
            localStorage: typeof(Storage) !== 'undefined'
        };

        console.log('浏览器功能支持：', support);
        return support;
    }
}

// 创建全局实例
const fileManager = new FileManager();

// 导出供其他模块使用
if (typeof window !== 'undefined') {
    window.FileManager = FileManager;
    window.fileManager = fileManager;
}

// 显示初始化信息
console.log(`
🎉 纯静态文件管理器已加载
📝 使用 fileManager.downloadMarkdown() 下载 Markdown 文件
📦 使用 fileManager.downloadJSON() 下载 JSON 文件
📚 使用 fileManager.showInstructions() 查看使用说明
`);


